﻿#region Usings

using System;
using System.Xml.XPath;
using Kazkommertsbank.Framework.Common;

#endregion

namespace Kazkommertsbank.Framework.Model.OrderStatus
{
    public class OrderStatusResponse
    {
        private readonly string _xml;

        public OrderStatusResponse(XPathNavigator nav)
        {
            _xml = nav.OuterXml;
            Payment = nav.GetAttribute("payment", "").ToBool();
            Status = nav.GetAttribute("status", "");
            Result = nav.GetAttribute("result", "");
            Amount = nav.GetAttribute("amount", "");
            Timestamp = nav.GetAttribute("timestamp", "");
            Reference = nav.GetAttribute("reference", "");
            Cardhash = nav.GetAttribute("cardhash", "");
            ApprovalCode = nav.GetAttribute("approval_code", "");
        }

        /// <summary>
        ///   состояние платежа:
        /// </summary>
        public bool Payment { get; set; }

        public string Status { get; set; }
        public string Result { get; set; }

        /// <summary>
        ///   сумма авторизации
        /// </summary>
        public string Amount { get; set; }

        /// <summary>
        ///   время авторизации
        /// </summary>
        public string Timestamp { get; set; }

        /// <summary>
        ///   референс транзакции
        /// </summary>
        public string Reference { get; set; }

        /// <summary>
        ///   маскированный номер карты
        /// </summary>
        public string Cardhash { get; set; }

        /// <summary>
        ///   аппрувал код
        /// </summary>
        public string ApprovalCode { get; set; }

        public string ToXmlString()
        {
            return _xml;
        }

        // платеж проведен
        // payment= true
        // status = 2
        // result = 0

        // платеж новый ожидает
        // payment= true
        // status = 0
        // result = 0

        // платеж отменен
        // payment= false
        // status = 2
        // result = любое

        // нестандартный случай
        // payment= false
        // status = Х неизвестно AcceptRejectCode
        // result = Х неизвестно ResultCode

        // запрос не дошел / такой ордер не найден
        // payment= false
        // status = 7
        // result = 7

        // запрос дошел , оплаты небыло
        // payment= false
        // status = 8
        // result = 8

        // системная ошибка
        // payment= false
        // status = 9
        // result = 9

        // Когда payment= true, то заполняются следующие поля значениями:
        // amount - сумма авторизации
        // timestamp - время авторизации
        // reference - референс транзакции
        // cardhash - маскированный номер карты
        // approval_code - аппрувал код
        //TODO: Описание состояния платежа
        public string GetPaymentStatusDescription()
        {
            throw new NotImplementedException();
        }
    }
}